package dpll.ast;

import dpll.parser.logpropBaseVisitor;
import dpll.parser.logpropParser.BicondicionContext;
import dpll.parser.logpropParser.BooleanoContext;
import dpll.parser.logpropParser.CondicionContext;
import dpll.parser.logpropParser.ConjuncionContext;
import dpll.parser.logpropParser.DisyuncionContext;
import dpll.parser.logpropParser.FormulaContext;
import dpll.parser.logpropParser.FormulasContext;
import dpll.parser.logpropParser.LiteralContext;
import dpll.parser.logpropParser.NegacionContext;
import dpll.parser.logpropParser.ParentesisContext;
import dpll.parser.logpropParser.Termino_finalContext;

public class ASTVisitor extends logpropBaseVisitor<IASTNode> {
	

	public ASTVisitor() {
		
	}
	

	@Override
	public IASTNode visitFormulas(FormulasContext ctx) {
		NodoFormulas formulas = new NodoFormulas();
		for (FormulaContext ctxFormula: ctx.formula())
			formulas.addFormula(visit(ctxFormula));
		return formulas;
		
	}



	@Override
	public IASTNode visitFormula(FormulaContext ctx) {

		return new NodoFormula(visit(ctx.proposicion()));
		
	}
	

	@Override
	public IASTNode visitBooleano(BooleanoContext ctx) {
		return (new NodoBooleano(ctx.getText()));
	}


	@Override
	public IASTNode visitCondicion(CondicionContext ctx) {
		return (new NodoCondicion(visit(ctx.proposicion(0)),visit(ctx.proposicion(1))));
	}


	@Override
	public IASTNode visitBicondicion(BicondicionContext ctx) {
		// TODO Auto-generated method stub
		return (new NodoBiCondicion(visit(ctx.proposicion(0)),visit(ctx.proposicion(1))));
	}


	@Override
	public IASTNode visitParentesis(ParentesisContext ctx) {
		//return (new NodoParentesis(visit(ctx.proposicion())));
		return visit(ctx.proposicion());
	}


	@Override
	public IASTNode visitNegacion(NegacionContext ctx) {
		return (new NodoNegacion(visit(ctx.proposicion())));
	}


	@Override
	public IASTNode visitDisyuncion(DisyuncionContext ctx) {
		// TODO Auto-generated method stub
		return (new NodoDisyuncion(visit(ctx.proposicion(0)),visit(ctx.proposicion(1))));
	}


	@Override
	public IASTNode visitConjuncion(ConjuncionContext ctx) {
		
		return (new NodoConjuncion(visit(ctx.proposicion(0)),visit(ctx.proposicion(1))));
		
	}


	@Override
	public IASTNode visitTermino_final(Termino_finalContext ctx) {
		
		//return (new NodoTerminoFinal(visit(ctx.termino())));
		return visit(ctx.termino());
		
	}


	@Override
	public IASTNode visitLiteral(LiteralContext ctx) {
		return (new NodoLiteral(ctx.getText()));
	}
	
	
	
	
	
	
	
}
